LEIC/LERC 2010/11

Sistemas Operativos

Exercícios de Sincronização Suplementares

Exercícios de Exame

1. 1º Teste 2002/03

Considere que existe um serviço com 3 guichets de atendimento (três processos servidores) a que chegam clientes (processos clientes). O sistema deve funcionar do seguinte modo:

Cliente Servidor
for (;;){ 
    If(NovoCliente()) { 

        Servico(); 

    } else .... 

}
for (;;){

    RequisitarServico();

    Atendimento();

}

Programe as funções que os processos devem invocar: RequisitarServico() e NovoCliente().

Utilize semáforos para sincronizar os processos. Programe em C ou pseudocódigo e defina as variáveis que necessitar. Não se preocupe com o procedimento Atendimento() e Serviço(); apenas se sabe que é um procedimento executado por ambos os processos e que termina ao fim de um intervalo de tempo finito.

2. 1º Teste 2001/02

Pretende-se construir uma aplicação em que processos Produtores enviam mensagens para um processo Consumidor. As mensagens são colocadas em 4 filas cada uma associada a um nível de prioridade (podíamos considerar mensagens com quatro níveis de urgência). As mensagens são todas do mesmo tamanho. As filas de mensagens têm espaço para 3 mensagens.

Quando um produtor pretende escrever a mensagem e a fila está cheia, fica bloqueado. O processo consumidor retira a mensagem da fila mais prioritária. Se não houver mensagem deve ficar bloqueado. Programe as 2 rotinas que permitem inserir e retirar mensagens:

      void inserir(int Prioridade, struct mens m)

      struct mens retirar()

Utilize semáforos para sincronizar os processos. Para simplificar considere as seguintes estruturas:

struct mens - para representar as mensagens.

struct mens [NIVEL] [TAMANHO] buffer - para representar as filas de mensagem NÍVEL corresponde ao nível de prioridade e TAMANHO ao número máximo de mensagens por fila.

3. 1º Teste Repescagem 2002/03

Considere o algoritmo dos leitores/escritores tal como foi explicado nas aulas teóricas e que teve oportunidade de usar no trabalho da cadeira. Modifique o programa para que tenha em conta os seguintes requisitos suplementares:

4. 1º Exame 2004/05

Considere uma sala de exposições e um conjunto de visitantes. Cada visitante é um ciclo infinito em que entra() numa sala de exposições e sai() dela ao fim de um determinado tempo. Cada exposição numa sala começa e acaba a uma hora determinada, e os visitantes só podem entrar e sair a essas horas. Cada sala tem N lugares; se houver mais visitantes, estes esperam pela próxima sessão. Programe as rotinas visitante() e sala() correspondentes aos visitantes e à sala de exposições, respectivamente, usando semáforos e trincos lógicos.